#!/bin/bash
echo "构建模块: $module"
#此变量用来对应每个子项目的映射对应端口，避免随机映射端口导致服务无法访问
declare -A map=(
	["server-gateway"]="8801:8801"
    ["server-auth"]="8802:8802"
    ["server-system"]="8803:8803"
    ["server-portal"]="8804:8804"
    ["server-app"]="8804:8804"
)
PORT_VAL=${map[$module]}
echo "Port value: $PORT_VAL  $module"
#新镜像的名称
timestamp=$(date +%Y%m%d%H%M)

NEW_IMAGE_NAME=$module:$timestamp

#切换到包含Dockerfile的目录
DIR="shaozj-services/$module"

#echo "切换到包含DOckerfile的目录 $DIR"
cd $DIR


#删除除最新镜像外的所有旧镜像
OLD_IMAGE_TAGS=$( docker images | grep "$module" | awk '{print $2}' | grep -v '$timestamp' | sort | uniq)
for tag in $OLD_IMAGE_TAGS; do
  docker rmi "${module}:${tag}"
  echo "旧镜像 ${module}:${tag} 已删除"
done

#构建镜像
echo "开始构建镜像：$NEW_IMAGE_NAME"
# 1.首先使用Dockerfile打镜像
ls
docker build -t $NEW_IMAGE_NAME .
if [ $? -ne 0 ]; then #判断上一个指令退出的状态码 0标识执行成功
  echo "构建镜像 $NEW_IMAGE_NAME 失败"
  exit 1
else
  echo "构建镜像 $NEW_IMAGE_NAME 成功"
fi

# 2.停止并删除之前运行的容器
echo '正在停止并删除之前运行的容器...'
RUNNING_CONTAINER_ID=$(docker ps | grep '$module' |awk '{print $1}')
if [ -n "$RUNNING_CONTAINER_ID" ]; then
  docker stop "$RUNNING_CONTAINER_ID"
  echo "容器 $RUNNING_CONTAINER_ID 已停止"
  docker rm "$RUNNING_CONTAINER_ID"
  echo "容器 $RUNNING_CONTAINER_ID 已删除"
fi

# 在宿主机上创建logs目录，用于容器挂载，这样查看日志可以直接在宿主机查看，比较方便
echo "创建日志目录.."
mkdir -p /Users/shaozj/Work/WorkSpace/logs

#3. 运行新的镜像
echo "正在运行新的镜像..."
#-v /Users/shaozj/Work/WorkSpace/logs:
docker run -d --name $module -p $PORT_VAL --restart=always $NEW_IMAGE_NAME

if [ $? -eq 0 ]; then
  echo "新容器运行成功"
else
  echo "新容器运行失败"
  exit 1
fi
